package 剑指offer.demo1;//https://www.nowcoder.com/practice/beb5aa231adc45b2a5dcc5b62c93f593?

/**
 * 思路：循环遍历每个元素，定义k作为奇数的后一个元素位置，奇数时记录位置与值与k交换
 * 1、二进制数最后一位为1其十进制转换为奇数；最后一位为0为偶数
 */
public class 调整数组顺序使奇数位于偶数前面 {
    public void reOrderArray(int [] array) {
        //合法性判断
        if (array == null || array.length == 0){
            return;
        }
        //奇数的下一个元素位置
        int k = 0;
        //循环遍历数组
        for (int i = 0; i < array.length; i++) {
            if ((array[i] & 1) == 1){
                //如果是奇数，记录位置
                int j = i;
                //记录当前位置的值
                int temp = array[i];
                //当j>k时把所有偶数元素后移
                while (j > k){
                    array[j] = array[--j];
                }
                //while退出来时当时的k位置的元素空了把遇到的奇数元素交换进去
                array[k ++ ] = temp;
            }
        }
    }
}
